IComparable<T>和IComparer<T>的区别

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:46:22

IComparable<T>
定义由“值类型或类实现”的通用的比较方法,以为排序实例创建类型特定的比较方法。
成员: CompareTo 比较当前对象和同一类型的另一对象。

IComparer<T>
定义类型为比较两个对象而实现的方法。
成员: Compare 比较两个对象并返回一个值,指示一个对象是小于、等于还是大于另一个对象。

从表面看IComparable<T>是排序时使用 IComparer<T>只是比较

编写一个类的时候,可以直接实现IComparable接口,但对于一些已经完成的,或者是无法修改的类,仍需要支持比较的话,而又不能实现IComparable所以就需要编写一个IComparer来支持。属于Helper类。
比如:
Control类不支持IComparable,但我们需要按控件名称排序,那么可以编写一个IComparer。
class ControlNameComparer : IComparer<Control>
{
int Compare (Control c1, Control c2)
{
if (c1 == c2)
return 0 ;

if (c1 == null)
return -1 ;
if (c2 == null)
return 1 ;

return c1.Name.CompareTo (c2.Name) ;
}
}